package com.atguigu.eduservice.controller;


import com.atguigu.commonutils.R;
import com.atguigu.eduservice.entity.EduTeacher;
import com.atguigu.eduservice.entity.vo.TeacherQuery;
import com.atguigu.eduservice.service.EduTeacherService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 讲师 前端控制器
 * </p>
 *
 * @author liuzedong
 * @since 2021-04-10
 */
@RestController
@RequestMapping("/eduservice/teacher")
@CrossOrigin
public class EduTeacherController {

	@Autowired
	private EduTeacherService teacherService;

	//1  查询讲师表中所有数据
	@GetMapping("findAll")
	public R findAllTeacher(){
		List<EduTeacher> list = teacherService.list(null);
		return R.ok().data("items",list);
	}

//	@DeleteMapping("{id}")    //id值需要通过路径进行传递
//	public R removeTeacher(@PathVariable String id){
//		boolean flag = teacherService.removeById(id);
//		return R.ok();
//	}

	@ApiOperation(value = "分页讲师列表")
	@GetMapping("pageTeacher/{current}/{limit}")
	public R pageList(
			@ApiParam(name = "current", value = "当前页码", required = true)
			@PathVariable Long current,
			@ApiParam(name = "limit", value = "每页记录数", required = true)
			@PathVariable Long limit){
		Page<EduTeacher> pageParam = new Page<>(current, limit);
		teacherService.page(pageParam, null);
		List<EduTeacher> records = pageParam.getRecords();
		long total = pageParam.getTotal();
		return R.ok().data("total", total).data("rows", records);
	}


	//根据讲师id进行查询
	@GetMapping("getTeacher/{id}")
	public R getTeacher(@PathVariable String id) {
		EduTeacher eduTeacher = teacherService.getById(id);
		return R.ok().data("teacher",eduTeacher);
	}



//	//4 条件查询带分页的方法
//	@PostMapping("pageTeacherCondition/{current}/{limit}")
//	public R pageTeacherCondition(@PathVariable long current,@PathVariable long limit,
//								  @RequestBody(required = false) TeacherQuery teacherQuery) {
//		//创建page对象
//		Page<EduTeacher> pageTeacher = new Page<>(current,limit);
//
//		//构建条件
//		QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>();
//		// 多条件组合查询
//		// mybatis学过 动态sql
//		String name = teacherQuery.getName();
//		Integer level = teacherQuery.getLevel();
//		String begin = teacherQuery.getBegin();
//		String end = teacherQuery.getEnd();
//		//判断条件值是否为空，如果不为空拼接条件
//		if(!StringUtils.isEmpty(name)) {
//			//构建条件
//			wrapper.like("name",name);
//		}
//		if(!StringUtils.isEmpty(level)) {
//			wrapper.eq("level",level);
//		}
//		if(!StringUtils.isEmpty(begin)) {
//			wrapper.ge("gmt_create",begin);
//		}
//		if(!StringUtils.isEmpty(end)) {
//			wrapper.le("gmt_create",end);
//		}
//
//		//调用方法实现条件查询分页
//		teacherService.page(pageTeacher,wrapper);
//
//		long total = pageTeacher.getTotal();//总记录数
//		List<EduTeacher> records = pageTeacher.getRecords(); //数据list集合
//		return R.ok().data("total",total).data("rows",records);
//	}


	//2 逻辑删除讲师的方法
	@ApiOperation(value = "逻辑删除讲师")
	@DeleteMapping("{id}")
	public R removeTeacher(@ApiParam(name = "id", value = "讲师ID", required = true)
						   @PathVariable String id) {
		boolean flag = teacherService.removeById(id);
		if(flag) {
			return R.ok();
		} else {
			return R.error();
		}
	}



	//4 条件查询带分页的方法
	@PostMapping("pageTeacherCondition/{current}/{limit}")
	public R pageTeacherCondition(@PathVariable long current,@PathVariable long limit,
								  @RequestBody(required = false)  TeacherQuery teacherQuery) {
		//创建page对象
		Page<EduTeacher> pageTeacher = new Page<>(current,limit);

		//构建条件
		QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>();
		// 多条件组合查询
		// mybatis学过 动态sql
		String name = teacherQuery.getName();
		Integer level = teacherQuery.getLevel();
		String begin = teacherQuery.getBegin();
		String end = teacherQuery.getEnd();
		//判断条件值是否为空，如果不为空拼接条件
		if(!StringUtils.isEmpty(name)) {
			//构建条件
			wrapper.like("name",name);
		}
		if(!StringUtils.isEmpty(level)) {
			wrapper.eq("level",level);
		}
		if(!StringUtils.isEmpty(begin)) {
			wrapper.ge("gmt_create",begin);
		}
		if(!StringUtils.isEmpty(end)) {
			wrapper.le("gmt_create",end);
		}

		//排序
		wrapper.orderByDesc("gmt_create");


		//调用方法实现条件查询分页
		teacherService.page(pageTeacher,wrapper);

		long total = pageTeacher.getTotal();//总记录数
		List<EduTeacher> records = pageTeacher.getRecords(); //数据list集合
		return R.ok().data("total",total).data("rows",records);
	}







	//添加讲师接口的方法
	@PostMapping("addTeacher")
	public R addTeacher(@RequestBody EduTeacher eduTeacher) {
		boolean save = teacherService.save(eduTeacher);
		if(save) {
			return R.ok();
		} else {
			return R.error();
		}
	}



	@ApiOperation(value = "根据ID查询讲师")
	@GetMapping("{id}")
	public R getById(
			@ApiParam(name = "id", value = "讲师ID", required = true)
			@PathVariable String id){

		EduTeacher teacher = teacherService.getById(id);
		return R.ok().data("item", teacher);
	}

	@ApiOperation(value = "根据ID修改讲师")
	@PostMapping("updateTeacher")
	public R updateById(
			@ApiParam(name = "teacher", value = "讲师对象", required = true)
			@RequestBody EduTeacher teacher){
		teacherService.updateById(teacher);
		return R.ok();
	}




}

